home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume13 / attrenice.pch < prev    next >
Encoding:
Internet Message Format  |  1988-03-13  |  18.0 KB

  1. Subject:  v13i097:  Renice program, patches for Plexus and Xenix
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: "John F. Haugh II" <hadron!sundc!rpp386!jfh>
  7. Posting-number: Volume 13, Issue 97
  8. Archive-name: attrenice.pch
  9.  
  10. R$ -
  11.  
  12. The file xenix.pat will patch renice to work on SCO Xenix for a '386, while
  13. the sys5.pat file will produce a renice which works on Plexus' System V.
  14.  
  15. How did I ever live without this command?
  16.  
  17. - John.
  18. ----- 8=< - 8=< - 8=< - 8=< - 8=< - 8=< -------------------------- SNIP ---
  19. #! /bin/sh
  20. # This is a shell archive, meaning:
  21. # 1. Remove everything above the #! /bin/sh line.
  22. # 2. Save the resulting text in a file.
  23. # 3. Execute the file with /bin/sh (not csh) to create:
  24. #    sys5.pat
  25. #    xenix.pat
  26. export PATH; PATH=/bin:/usr/bin:$PATH
  27. if test -f 'sys5.pat'
  28. then
  29.     echo shar: "will not over-write existing file 'sys5.pat'"
  30. else
  31. cat << \SHAR_EOF > 'sys5.pat'
  32. *** renice.c.orig    Thu Mar  3 11:01:09 1988
  33. --- renice.c    Thu Mar  3 11:20:31 1988
  34. ***************
  35. *** 24,30
  36.   #include <grp.h>
  37.   #include <sys/types.h>
  38.   #include <sys/param.h>
  39. - #include <sys/tune.h>
  40.   #include <sys/proc.h>
  41.   #include <nlist.h>
  42.   
  43.  
  44. --- 24,29 -----
  45.   #include <grp.h>
  46.   #include <sys/types.h>
  47.   #include <sys/param.h>
  48.   #include <sys/proc.h>
  49.   #include <sys/var.h>
  50.   #include <nlist.h>
  51. ***************
  52. *** 26,31
  53.   #include <sys/param.h>
  54.   #include <sys/tune.h>
  55.   #include <sys/proc.h>
  56.   #include <nlist.h>
  57.   
  58.   
  59.  
  60. --- 25,31 -----
  61.   #include <sys/types.h>
  62.   #include <sys/param.h>
  63.   #include <sys/proc.h>
  64. + #include <sys/var.h>
  65.   #include <nlist.h>
  66.   
  67.   
  68. ***************
  69. *** 37,44
  70.   
  71.   char *progname;
  72.   
  73. ! #define tuhiaddr (mysyms[0].n_value)
  74. ! #define procaddr (mysyms[1].n_value)
  75.   
  76.   struct nlist mysyms[] =
  77.   {
  78.  
  79. --- 37,44 -----
  80.   
  81.   char *progname;
  82.   
  83. ! #define procaddr (mysyms[0].n_value)
  84. ! #define    vaddr (mysyms[1].n_value)
  85.   
  86.   struct nlist mysyms[] =
  87.   {
  88. ***************
  89. *** 42,49
  90.   
  91.   struct nlist mysyms[] =
  92.   {
  93. !     { "tuhi", },
  94. !     { "proc", },
  95.       { (char *)0, },
  96.   };
  97.   
  98.  
  99. --- 42,49 -----
  100.   
  101.   struct nlist mysyms[] =
  102.   {
  103. !     { "_proc", },
  104. !     { "_v", },
  105.       { (char *)0, },
  106.   };
  107.   
  108. ***************
  109. *** 52,58
  110.   int kmem;
  111.   int myuid;
  112.   int NPROC;
  113. ! static struct proc proc;
  114.   
  115.   
  116.   void usage()
  117.  
  118. --- 52,59 -----
  119.   int kmem;
  120.   int myuid;
  121.   int NPROC;
  122. ! static struct proc proctab;
  123. ! static struct var v;
  124.   
  125.   
  126.   void usage()
  127. ***************
  128. *** 109,116
  129.   /* one-time setup of main data structures from the kernel */
  130.   setup()
  131.   {
  132. -     struct tunable tune;
  133.       if ( (kmem=open("/dev/kmem", O_RDWR)) < 0 )
  134.       {
  135.       sprintf(buf, "%s: can't open /dev/kmem", progname);
  136.  
  137. --- 110,115 -----
  138.   /* one-time setup of main data structures from the kernel */
  139.   setup()
  140.   {
  141.       if ( (kmem=open("/dev/kmem", O_RDWR)) < 0 )
  142.       {
  143.       sprintf(buf, "%s: can't open /dev/kmem", progname);
  144. ***************
  145. *** 124,133
  146.       perror(buf);
  147.       exit(1);
  148.       }
  149. -     myuid = getuid();
  150. -     setuid(myuid);
  151.   #ifdef DEBUG
  152.       fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  153.   #endif DEBUG
  154.  
  155. --- 123,128 -----
  156.       perror(buf);
  157.       exit(1);
  158.       }
  159.   #ifdef DEBUG
  160.       fprintf(stderr, "v:    0x%08lx\n", vaddr);
  161.   #endif DEBUG
  162. ***************
  163. *** 129,135
  164.       setuid(myuid);
  165.   
  166.   #ifdef DEBUG
  167. !     fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  168.   #endif DEBUG
  169.       kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  170.   
  171.  
  172. --- 124,130 -----
  173.       exit(1);
  174.       }
  175.   #ifdef DEBUG
  176. !     fprintf(stderr, "v:    0x%08lx\n", vaddr);
  177.   #endif DEBUG
  178.       kcopy((char *)&v, vaddr, (long) sizeof v);
  179.   
  180. ***************
  181. *** 131,137
  182.   #ifdef DEBUG
  183.       fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  184.   #endif DEBUG
  185. !     kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  186.   
  187.       /* do indirection on the proc address, since it */
  188.       /* is just a pointer in the kernel */
  189.  
  190. --- 126,132 -----
  191.   #ifdef DEBUG
  192.       fprintf(stderr, "v:    0x%08lx\n", vaddr);
  193.   #endif DEBUG
  194. !     kcopy((char *)&v, vaddr, (long) sizeof v);
  195.   
  196.   #ifdef DEBUG
  197.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  198. ***************
  199. *** 133,142
  200.   #endif DEBUG
  201.       kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  202.   
  203. -     /* do indirection on the proc address, since it */
  204. -     /* is just a pointer in the kernel */
  205. -     kcopy((char *)&procaddr, procaddr, (long) sizeof procaddr);
  206.   #ifdef DEBUG
  207.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  208.   #endif DEBUG
  209.  
  210. --- 128,133 -----
  211.   #endif DEBUG
  212.       kcopy((char *)&v, vaddr, (long) sizeof v);
  213.   
  214.   #ifdef DEBUG
  215.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  216.   #endif DEBUG
  217. ***************
  218. *** 141,147
  219.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  220.   #endif DEBUG
  221.   
  222. !     NPROC = tune.nproc;
  223.   
  224.   #ifdef DEBUG
  225.       fprintf(stderr, "NPROC:    %d\n", NPROC);
  226.  
  227. --- 132,140 -----
  228.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  229.   #endif DEBUG
  230.   
  231. !     NPROC = v.v_proc;
  232. !     myuid = getuid();
  233. !     setuid(myuid);
  234.   
  235.   #ifdef DEBUG
  236.       fprintf(stderr, "NPROC:    %d\n", NPROC);
  237. ***************
  238. *** 195,201
  239.   
  240.       for ( i=0 ; i<NPROC ; ++i )
  241.       {
  242. !     kcopy((char *)&proc,
  243.             (long)&((struct proc *)procaddr)[i],
  244.             (long)sizeof proc);
  245.       if ( proc.p_pid == pid )
  246.  
  247. --- 188,194 -----
  248.   
  249.       for ( i=0 ; i<NPROC ; ++i )
  250.       {
  251. !     kcopy((char *)&proctab,
  252.             (long)&((struct proc *)procaddr)[i],
  253.             (long)sizeof proctab);
  254.       if ( proctab.p_pid == pid )
  255. ***************
  256. *** 197,204
  257.       {
  258.       kcopy((char *)&proc,
  259.             (long)&((struct proc *)procaddr)[i],
  260. !           (long)sizeof proc);
  261. !     if ( proc.p_pid == pid )
  262.       {
  263.   #ifdef DEBUG
  264.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  265.  
  266. --- 190,197 -----
  267.       {
  268.       kcopy((char *)&proctab,
  269.             (long)&((struct proc *)procaddr)[i],
  270. !           (long)sizeof proctab);
  271. !     if ( proctab.p_pid == pid )
  272.       {
  273.   #ifdef DEBUG
  274.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  275. ***************
  276. *** 202,208
  277.       {
  278.   #ifdef DEBUG
  279.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  280. !            i, proc.p_uid);
  281.   
  282.           fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  283.   #endif DEBUG
  284.  
  285. --- 195,201 -----
  286.       {
  287.   #ifdef DEBUG
  288.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  289. !            i, proctab.p_uid);
  290.   
  291.           fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  292.   #endif DEBUG
  293. ***************
  294. *** 204,210
  295.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  296.              i, proc.p_uid);
  297.   
  298. !         fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  299.   #endif DEBUG
  300.   
  301.           tmpnice = proc.p_nice;
  302.  
  303. --- 197,203 -----
  304.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  305.              i, proctab.p_uid);
  306.   
  307. !         fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  308.   #endif DEBUG
  309.   
  310.           tmpnice = proctab.p_nice;
  311. ***************
  312. *** 207,213
  313.           fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  314.   #endif DEBUG
  315.   
  316. !         tmpnice = proc.p_nice;
  317.   
  318.           if (relative)
  319.           tmpnice += value;
  320.  
  321. --- 200,206 -----
  322.           fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  323.   #endif DEBUG
  324.   
  325. !         tmpnice = proctab.p_nice;
  326.   
  327.           if (relative)
  328.           tmpnice += value;
  329. ***************
  330. *** 223,229
  331.           fprintf(stderr, "New p_nice is %d\n", tmpnice);
  332.   #endif DEBUG
  333.   
  334. !         if ( myuid && (myuid != proc.p_uid || tmpnice<proc.p_nice) )
  335.           {
  336.           errno = EACCES;
  337.           sprintf(buf, "%s: can't renice process %d", progname, pid);
  338.  
  339. --- 216,222 -----
  340.           fprintf(stderr, "New p_nice is %d\n", tmpnice);
  341.   #endif DEBUG
  342.   
  343. !         if ( myuid && (myuid != proctab.p_uid || tmpnice<proctab.p_nice) )
  344.           {
  345.           errno = EACCES;
  346.           sprintf(buf, "%s: can't renice process %d", progname, pid);
  347. ***************
  348. *** 231,237
  349.           return 1;
  350.           }
  351.   
  352. !         proc.p_nice = tmpnice;
  353.   
  354.           kwrite((long)&((struct proc *)procaddr)[i]
  355.              + ( ((char *)&proc.p_nice) - (char *)&proc ),
  356.  
  357. --- 224,230 -----
  358.           return 1;
  359.           }
  360.   
  361. !         proctab.p_nice = tmpnice;
  362.   
  363.           kwrite((long)&((struct proc *)procaddr)[i]
  364.              + ( ((char *)&proctab.p_nice) - (char *)&proctab ),
  365. ***************
  366. *** 234,242
  367.           proc.p_nice = tmpnice;
  368.   
  369.           kwrite((long)&((struct proc *)procaddr)[i]
  370. !            + ( ((char *)&proc.p_nice) - (char *)&proc ),
  371. !            (char *)&proc.p_nice,
  372. !            (long)sizeof proc.p_nice);
  373.           return 0;
  374.       }
  375.       }
  376.  
  377. --- 227,235 -----
  378.           proctab.p_nice = tmpnice;
  379.   
  380.           kwrite((long)&((struct proc *)procaddr)[i]
  381. !            + ( ((char *)&proctab.p_nice) - (char *)&proctab ),
  382. !            (char *)&proctab.p_nice,
  383. !            (long)sizeof proctab.p_nice);
  384.           return 0;
  385.       }
  386.       }
  387. ***************
  388. *** 240,246
  389.           return 0;
  390.       }
  391.       }
  392.       fprintf(stderr, "%s: process %d not found.\n", progname, pid);
  393.   
  394.       return 1;
  395.  
  396. --- 233,238 -----
  397.           return 0;
  398.       }
  399.       }
  400.       fprintf(stderr, "%s: process %d not found.\n", progname, pid);
  401.   
  402.       return 1;
  403. SHAR_EOF
  404. fi
  405. if test -f 'xenix.pat'
  406. then
  407.     echo shar: "will not over-write existing file 'xenix.pat'"
  408. else
  409. cat << \SHAR_EOF > 'xenix.pat'
  410. *** renice.c.orig
  411. --- renice.c
  412. **************
  413. *** 13,18
  414.    * yours, I would appreciate being given the appropriate
  415.    * amount of credit.
  416.    *                -=] Ford [=-
  417.    ************************************************************/
  418.   
  419.   #include <stdio.h>
  420. --- 13,23 -----
  421.    * yours, I would appreciate being given the appropriate
  422.    * amount of credit.
  423.    *                -=] Ford [=-
  424. +  *
  425. +  *
  426. +  *    Modifications
  427. +  *    3/3/88    Ported to Plexus Unix System V    pigs!haugj@rpp386.uucp
  428. +  *    3/3/88    Ported to SCO Xenix System V    jfh@rpp386.uucp
  429.    ************************************************************/
  430.   
  431.   #include <stdio.h>
  432. **************
  433. *** 23,29
  434.   #include <grp.h>
  435.   #include <sys/types.h>
  436.   #include <sys/param.h>
  437. ! #include <sys/tune.h>
  438.   #include <sys/proc.h>
  439.   #include <nlist.h>
  440.   
  441. --- 28,34 -----
  442.   #include <grp.h>
  443.   #include <sys/types.h>
  444.   #include <sys/param.h>
  445. ! #include <sys/page.h>
  446.   #include <sys/proc.h>
  447.   #include <sys/var.h>
  448.   #include <a.out.h>
  449. **************
  450. *** 25,31
  451.   #include <sys/param.h>
  452.   #include <sys/tune.h>
  453.   #include <sys/proc.h>
  454. ! #include <nlist.h>
  455.   
  456.   
  457.   extern long lseek();
  458. --- 30,37 -----
  459.   #include <sys/param.h>
  460.   #include <sys/page.h>
  461.   #include <sys/proc.h>
  462. ! #include <sys/var.h>
  463. ! #include <a.out.h>
  464.   
  465.   
  466.   extern long lseek();
  467. **************
  468. *** 36,43
  469.   
  470.   char *progname;
  471.   
  472. ! #define tuhiaddr (mysyms[0].n_value)
  473. ! #define procaddr (mysyms[1].n_value)
  474.   
  475.   struct nlist mysyms[] =
  476.   {
  477. --- 42,49 -----
  478.   
  479.   char *progname;
  480.   
  481. ! #define procaddr (mysyms[0].xl_value)
  482. ! #define    vaddr (mysyms[1].xl_value)
  483.   
  484.   struct xlist mysyms[] =
  485.   {
  486. **************
  487. *** 39,45
  488.   #define tuhiaddr (mysyms[0].n_value)
  489.   #define procaddr (mysyms[1].n_value)
  490.   
  491. ! struct nlist mysyms[] =
  492.   {
  493.       { "tuhi", },
  494.       { "proc", },
  495. --- 45,51 -----
  496.   #define procaddr (mysyms[0].xl_value)
  497.   #define    vaddr (mysyms[1].xl_value)
  498.   
  499. ! struct xlist mysyms[] =
  500.   {
  501.       { 0,0,0,"_proc", },
  502.       { 0,0,0,"_v", },
  503. **************
  504. *** 41,49
  505.   
  506.   struct nlist mysyms[] =
  507.   {
  508. !     { "tuhi", },
  509. !     { "proc", },
  510. !     { (char *)0, },
  511.   };
  512.   
  513.   char buf[BUFSIZ];
  514. --- 47,55 -----
  515.   
  516.   struct xlist mysyms[] =
  517.   {
  518. !     { 0,0,0,"_proc", },
  519. !     { 0,0,0,"_v", },
  520. !     { 0,0,0,(char *)0, },
  521.   };
  522.   
  523.   char buf[BUFSIZ];
  524. **************
  525. *** 51,57
  526.   int kmem;
  527.   int myuid;
  528.   int NPROC;
  529. ! static struct proc proc;
  530.   
  531.   
  532.   void usage()
  533. --- 57,64 -----
  534.   int kmem;
  535.   int myuid;
  536.   int NPROC;
  537. ! static struct proc proctab;
  538. ! static struct var v;
  539.   
  540.   
  541.   void usage()
  542. **************
  543. *** 108,115
  544.   /* one-time setup of main data structures from the kernel */
  545.   setup()
  546.   {
  547. -     struct tunable tune;
  548.       if ( (kmem=open("/dev/kmem", O_RDWR)) < 0 )
  549.       {
  550.       sprintf(buf, "%s: can't open /dev/kmem", progname);
  551. --- 115,120 -----
  552.   /* one-time setup of main data structures from the kernel */
  553.   setup()
  554.   {
  555.       if ( (kmem=open("/dev/kmem", O_RDWR)) < 0 )
  556.       {
  557.       sprintf(buf, "%s: can't open /dev/kmem", progname);
  558. **************
  559. *** 117,123
  560.       exit(1);
  561.       }
  562.   
  563. !     if (nlist("/unix", mysyms))
  564.       {
  565.       sprintf(buf, "%s: can't nlist /unix", progname);
  566.       perror(buf);
  567. --- 122,128 -----
  568.       exit(1);
  569.       }
  570.   
  571. !     if (xlist("/xenix", mysyms))
  572.       {
  573.       sprintf(buf, "%s: can't xlist /xenix", progname);
  574.       perror(buf);
  575. **************
  576. *** 119,125
  577.   
  578.       if (nlist("/unix", mysyms))
  579.       {
  580. !     sprintf(buf, "%s: can't nlist /unix", progname);
  581.       perror(buf);
  582.       exit(1);
  583.       }
  584. --- 124,130 -----
  585.   
  586.       if (xlist("/xenix", mysyms))
  587.       {
  588. !     sprintf(buf, "%s: can't xlist /xenix", progname);
  589.       perror(buf);
  590.       exit(1);
  591.       }
  592. **************
  593. *** 123,132
  594.       perror(buf);
  595.       exit(1);
  596.       }
  597. -     myuid = getuid();
  598. -     setuid(myuid);
  599.   #ifdef DEBUG
  600.       fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  601.   #endif DEBUG
  602. --- 128,133 -----
  603.       perror(buf);
  604.       exit(1);
  605.       }
  606.   #ifdef DEBUG
  607.       fprintf(stderr, "v:    0x%08lx\n", vaddr);
  608.   #endif DEBUG
  609. **************
  610. *** 128,134
  611.       setuid(myuid);
  612.   
  613.   #ifdef DEBUG
  614. !     fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  615.   #endif DEBUG
  616.       kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  617.   
  618. --- 129,135 -----
  619.       exit(1);
  620.       }
  621.   #ifdef DEBUG
  622. !     fprintf(stderr, "v:    0x%08lx\n", vaddr);
  623.   #endif DEBUG
  624.       kcopy((char *)&v, vaddr, (long) sizeof v);
  625.   
  626. **************
  627. *** 130,136
  628.   #ifdef DEBUG
  629.       fprintf(stderr, "tuhi:    0x%08lx\n", tuhiaddr);
  630.   #endif DEBUG
  631. !     kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  632.   
  633.       /* do indirection on the proc address, since it */
  634.       /* is just a pointer in the kernel */
  635. --- 131,137 -----
  636.   #ifdef DEBUG
  637.       fprintf(stderr, "v:    0x%08lx\n", vaddr);
  638.   #endif DEBUG
  639. !     kcopy((char *)&v, vaddr, (long) sizeof v);
  640.   
  641.   #ifdef DEBUG
  642.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  643. **************
  644. *** 132,141
  645.   #endif DEBUG
  646.       kcopy((char *)&tune, tuhiaddr, (long) sizeof tune);
  647.   
  648. -     /* do indirection on the proc address, since it */
  649. -     /* is just a pointer in the kernel */
  650. -     kcopy((char *)&procaddr, procaddr, (long) sizeof procaddr);
  651.   #ifdef DEBUG
  652.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  653.   #endif DEBUG
  654. --- 133,138 -----
  655.   #endif DEBUG
  656.       kcopy((char *)&v, vaddr, (long) sizeof v);
  657.   
  658.   #ifdef DEBUG
  659.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  660.   #endif DEBUG
  661. **************
  662. *** 140,146
  663.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  664.   #endif DEBUG
  665.   
  666. !     NPROC = tune.nproc;
  667.   
  668.   #ifdef DEBUG
  669.       fprintf(stderr, "NPROC:    %d\n", NPROC);
  670. --- 137,145 -----
  671.       fprintf(stderr, "proc:    0x%08lx\n", procaddr);
  672.   #endif DEBUG
  673.   
  674. !     NPROC = v.v_proc;
  675. !     myuid = getuid();
  676. !     setuid(myuid);
  677.   
  678.   #ifdef DEBUG
  679.       fprintf(stderr, "NPROC:    %d\n", NPROC);
  680. **************
  681. *** 195,201
  682.   
  683.       for ( i=0 ; i<NPROC ; ++i )
  684.       {
  685. !     kcopy((char *)&proc,
  686.             (long)&((struct proc *)procaddr)[i],
  687.             (long)sizeof proc);
  688.       if ( proc.p_pid == pid )
  689. --- 194,200 -----
  690.   
  691.       for ( i=0 ; i<NPROC ; ++i )
  692.       {
  693. !     kcopy((char *)&proctab,
  694.             (long)&((struct proc *)procaddr)[i],
  695.             (long)sizeof proctab);
  696.       if ( proctab.p_pid == pid )
  697. **************
  698. *** 197,204
  699.       {
  700.       kcopy((char *)&proc,
  701.             (long)&((struct proc *)procaddr)[i],
  702. !           (long)sizeof proc);
  703. !     if ( proc.p_pid == pid )
  704.       {
  705.   #ifdef DEBUG
  706.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  707. --- 196,203 -----
  708.       {
  709.       kcopy((char *)&proctab,
  710.             (long)&((struct proc *)procaddr)[i],
  711. !           (long)sizeof proctab);
  712. !     if ( proctab.p_pid == pid )
  713.       {
  714.   #ifdef DEBUG
  715.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  716. **************
  717. *** 202,208
  718.       {
  719.   #ifdef DEBUG
  720.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  721. !            i, proc.p_uid);
  722.   
  723.           fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  724.   #endif DEBUG
  725. --- 201,207 -----
  726.       {
  727.   #ifdef DEBUG
  728.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  729. !            i, proctab.p_uid);
  730.   
  731.           fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  732.   #endif DEBUG
  733. **************
  734. *** 204,210
  735.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  736.              i, proc.p_uid);
  737.   
  738. !         fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  739.   #endif DEBUG
  740.   
  741.           tmpnice = proc.p_nice;
  742. --- 203,209 -----
  743.           fprintf(stderr, "Found it!  proc[%d], p_uid is %d\n",
  744.              i, proctab.p_uid);
  745.   
  746. !         fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  747.   #endif DEBUG
  748.   
  749.           tmpnice = proctab.p_nice;
  750. **************
  751. *** 207,213
  752.           fprintf(stderr, "Old p_nice was %d\n", proc.p_nice);
  753.   #endif DEBUG
  754.   
  755. !         tmpnice = proc.p_nice;
  756.   
  757.           if (relative)
  758.           tmpnice += value;
  759. --- 206,212 -----
  760.           fprintf(stderr, "Old p_nice was %d\n", proctab.p_nice);
  761.   #endif DEBUG
  762.   
  763. !         tmpnice = proctab.p_nice;
  764.   
  765.           if (relative)
  766.           tmpnice += value;
  767. **************
  768. *** 223,229
  769.           fprintf(stderr, "New p_nice is %d\n", tmpnice);
  770.   #endif DEBUG
  771.   
  772. !         if ( myuid && (myuid != proc.p_uid || tmpnice<proc.p_nice) )
  773.           {
  774.           errno = EACCES;
  775.           sprintf(buf, "%s: can't renice process %d", progname, pid);
  776. --- 222,228 -----
  777.           fprintf(stderr, "New p_nice is %d\n", tmpnice);
  778.   #endif DEBUG
  779.   
  780. !         if ( myuid && (myuid != proctab.p_uid || tmpnice<proctab.p_nice) )
  781.           {
  782.           errno = EACCES;
  783.           sprintf(buf, "%s: can't renice process %d", progname, pid);
  784. **************
  785. *** 231,237
  786.           return 1;
  787.           }
  788.   
  789. !         proc.p_nice = tmpnice;
  790.   
  791.           kwrite((long)&((struct proc *)procaddr)[i]
  792.              + ( ((char *)&proc.p_nice) - (char *)&proc ),
  793. --- 230,236 -----
  794.           return 1;
  795.           }
  796.   
  797. !         proctab.p_nice = tmpnice;
  798.   
  799.           kwrite((long)&((struct proc *)procaddr)[i]
  800.              + ( ((char *)&proctab.p_nice) - (char *)&proctab ),
  801. **************
  802. *** 234,242
  803.           proc.p_nice = tmpnice;
  804.   
  805.           kwrite((long)&((struct proc *)procaddr)[i]
  806. !            + ( ((char *)&proc.p_nice) - (char *)&proc ),
  807. !            (char *)&proc.p_nice,
  808. !            (long)sizeof proc.p_nice);
  809.           return 0;
  810.       }
  811.       }
  812. --- 233,241 -----
  813.           proctab.p_nice = tmpnice;
  814.   
  815.           kwrite((long)&((struct proc *)procaddr)[i]
  816. !            + ( ((char *)&proctab.p_nice) - (char *)&proctab ),
  817. !            (char *)&proctab.p_nice,
  818. !            (long)sizeof proctab.p_nice);
  819.           return 0;
  820.       }
  821.       }
  822. **************
  823. *** 240,246
  824.           return 0;
  825.       }
  826.       }
  827.       fprintf(stderr, "%s: process %d not found.\n", progname, pid);
  828.   
  829.       return 1;
  830. --- 239,244 -----
  831.           return 0;
  832.       }
  833.       }
  834.       fprintf(stderr, "%s: process %d not found.\n", progname, pid);
  835.   
  836.       return 1;
  837. SHAR_EOF
  838. fi
  839. exit 0
  840. #    End of shell archive
  841.  
  842.